6. 클래스 인라인하기
클래스 추출하기(7.5)의 반대
- 제 역할을 못 해서 그대로 두면 안 되는 클래스가 대상
- 역할을 옮기는 리패터링 후 특정 클래스에 남은 역할이 거의 없을 때 주로 발생
- 이 클래스의 역할을 가장 많이 사용하는 클래스로 흡수
- 두 클래스의 기능을 지금과 다르게 배분하고 싶을 때에도 사용
- 두 클래스를 인라인 해서 하나로 합친 두, 다시 새로운 클래스로 추출(7.5)
절차
- 소스 클래스의 각 public 메서드에 대응하는 메서스들을 타깃 클래스에 생성한다. 이 메서드들은 단순히 작업을 소스 클래스로 위임해야 한다.
- 소스 클래스의 메서드를 사용하는 코드를 모두 타깃 클래스의 위임 메서드를 사용하도록 바꾼다. 하나씩 바꿀 때마다 테스트한다.
- 소스 클래스의 메서드와 필드를 모두 타깃 클래스로 옮긴다. 하나씩 옮길 때마다 테스트한다.
- 소스 클래스를 삭제하고 조의를 표한다.
예시 코드
😞 Before
class Person {
get officeAreaCode() {
return this._telephoneNumber.areaCode
}
get officeNumber() {
return this._telephoneNumber.number
}
}
class TelephoneNumber {
get areaCode() {
return this._areaCode
}
get number() {
return this._number
}
}
😃 After
class Person {
get officeAreaCode() {
return this._officeAreaCode
}
get officeNumber() {
return this._officeNumber
}
}